package forcebuckle;

/** Z 字形变换
 *将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行Z字形排列。
 *
 * 比如输入字符串为 "PAYPALISHIRING"行数为 3 时，排列如下：
 *
 * P   A   H   N      p(0,0)          A(0,2)
 * A P L S I I G      A(1,0)  p(1,1)  L(1,2)
 * Y   I   R          Y(2,0)          I(2,2)
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："PAHNAPLSIIGYIR"。
 */
public class ZTransform {
    public static void main(String[] args) {
        String s="PAYPALISHIRING";
        ZTransform zTransform=new ZTransform();
        System.out.println(zTransform.convert(s,3));
    }

    public int[][] convert(String s, int numRows) {
        char[] chars=s.toCharArray();//转换成数组
        int [][] a=new int[0][0];
        int length=s.length();
//        a [0][0]=chars[0];//把第一个元素绑定
//        for (int i = 1; i <length; i++) {
                int b=0;//设一个变量b 去改变列数
                int d=1;
                int i=1;
                while (b<(numRows)&&d<=length) {//放入第二排
                    a[i][b] = chars[d];//a[1][0]=A  a[1][1]=P
                    d+=2;
                    b++;
                }
                int j=0;
                while (b<(numRows)&&d<=length){//放入第一排
                    if(b%2==0){//列是偶数
                        a[j][b]=0;
                    }else
                    a[j][b]=chars[d-1];//a[0][0]=p  a[0][1]=null a[0][2]=A
                    d+=4;
                    b++;
                }
                int f=2;
                int g=2;
                while (b<(numRows)&&d<=length){//放入第三排
                    if(b%2==0){//列是偶数
                        a[f][b]=0;
                    }else
                        a[f][b]=chars[g];//a[2][0]=Y  a[2][1]=null a[2][2]=I
                    g+=4;
                    b++;
                }

        return a;
    }
}
